package com.pausa.sgdi.ejb.bean;

import java.util.List;

import javax.ejb.Local;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.pausa.sgdi.ejb.entities.Empresa;
import com.pausa.sgdi.ejb.entities.Perfil;
import com.pausa.sgdi.ejb.entities.Puesto;
import com.pausa.sgdi.ejb.entities.Situacion;
import com.pausa.sgdi.ejb.entities.Tecnico;
import com.pausa.sgdi.ejb.entities.TipoDispositivo;
import com.pausa.sgdi.ejb.entities.TipoEmpresa;
import com.pausa.sgdi.ejb.entities.TipoId;
import com.pausa.sgdi.ejb.entities.Usuario;
import com.pausa.sgdi.ejb.entities.Zona;


@Stateless
@Local(CatalogoService.class)
public class CatalogoServiceBean implements CatalogoService {
	
	@PersistenceContext
	protected EntityManager manager;
	
	@Override
	public String getTipoDispotivo(String zona) {
//		manager.persist(new Welcome(zona));;
		return "Works!";
	}

	@Override
	public String getCatalog() {
		return "Works Catalogs";
	}
	
	@Override
	@SuppressWarnings("unchecked")
	public List<TipoDispositivo> findAllTipoDispositivo() {
		return manager.createQuery("from TipoDispositivo").getResultList();
	}
	
//	@RolesAllowed({"admin"})
	public TipoDispositivo createTipoDispositivo(TipoDispositivo tipoDispositivo){
		return manager.merge(tipoDispositivo);
	}
	
//	@RolesAllowed({"admin"})
	public TipoDispositivo modifyTipoDispositivo(TipoDispositivo tipoDispositivo){
		return manager.merge(tipoDispositivo);
	}

//	@RolesAllowed({"admin"})
	public void deleteTipoDispositivo(TipoDispositivo tipoDispositivo){
		tipoDispositivo = manager.find(TipoDispositivo.class, tipoDispositivo.getIdTipoDispositivo());
		manager.remove(tipoDispositivo);
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<Perfil> findAllPerfil() {
		return manager.createQuery("from Perfil").getResultList();
	}

	@Override
	public Perfil createPerfil(Perfil perfil) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Perfil modifyPerfil(Perfil perfil) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void deletePerfil(Perfil perfil) {
		// TODO Auto-generated method stub
		
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<Puesto> findAllPuesto() {
		return manager.createQuery("from Puesto").getResultList();
	}

	@Override
	public Puesto createPuesto(Puesto puesto) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Puesto modifyPuesto(Puesto puesto) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void deletePuesto(Puesto puesto) {
		// TODO Auto-generated method stub
		
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<Situacion> findAllSituacion() {
		return manager.createQuery("from Situacion").getResultList();
	}

	@Override
	public Situacion createSituacion(Situacion situacion) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Situacion modifySituacion(Situacion sitacion) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void deleteSituacion(Situacion situacion) {
		// TODO Auto-generated method stub
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<TipoEmpresa> findAllTipoEmpresa() {
		return manager.createQuery("from TipoEmpresa").getResultList();
	}

	@Override
	public TipoEmpresa createTipoEmpresa(TipoEmpresa tipoEmpresa) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public TipoEmpresa modifyTipoEmpresa(TipoEmpresa tipoEmpresa) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void deleteTipoEmpresa(TipoEmpresa tipoEmpresa) {
		// TODO Auto-generated method stub
		
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<Zona> findAllZona() {
		return manager.createQuery("from Zona").getResultList();
	}

	@Override
	public Zona createZona(Zona zona) {
		return manager.merge(zona);
	}

	@Override
	public Zona modifyZona(Zona zona) {
		return manager.merge(zona);
	}

	@Override
	public void deleteZona(Zona zona) {
		manager.remove(zona);
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<TipoId> findAllTipoId() {
		return manager.createQuery("from TipoId").getResultList();
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<Empresa> findAllEmpresa() {
		return manager.createQuery("from Empresa").getResultList();
	}
	
	public Empresa createEmpresa(Empresa empresa)
	{
		return manager.merge(empresa);
	}

	@Override
	public Empresa modifyEmpresa(Empresa empresa) {
		return manager.merge(empresa);
	}

	@Override
	public void deleteEmpresa(Empresa empresa) {
		empresa = manager.find(Empresa.class, empresa.getIdEmpresa());
		manager.remove(empresa);
	}
	
	@Override
	@SuppressWarnings("unchecked") 
	public List<Usuario> findAllUsuario(){
		return manager.createQuery("from Usuario").getResultList();
	}

	@Override
	public Usuario createUsuario(Usuario usuario) {
		return manager.merge(usuario);
	}

	@Override
	public Usuario modifyUsuario(Usuario usuario) {
		return manager.merge(usuario);
	}

	@Override
	public void deleteUsuario(Usuario usuario) {
		usuario = manager.find(Usuario.class, usuario.getIdUsuario());
		manager.remove(usuario);
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<Tecnico> findAllTecnico() {
		return manager.createQuery("from Tecnico").getResultList();
	}

	@Override
	public Tecnico createTecnico(Tecnico tecnico) {
		if(tecnico.getDireccion()!=null){
			try{
				manager.merge(tecnico.getDireccion());
			}catch (Exception e) {
				// TODO: handle exception
			}
			
		}
		return manager.merge(tecnico);
	}

	@Override
	public Tecnico modifyTecnico(Tecnico tecnico) {
		return manager.merge(tecnico);
	}

	@Override
	public void deleteTecnico(Tecnico tecnico) {
		tecnico = manager.find(Tecnico.class, tecnico.getIdTecnico());
	}
}
